package com.blog.mybatisplus;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;
import java.util.List;

/**
 * @author tcj
 * @date 2020/9/30 11:19
 */
public class MybatisPlusConfig {

    //项目路径  修改为你项目的实际绝对路径
    private static String javaSrcDir  = "E:/IdeaProject/myblog/blog-commons/src/main/java";


    //这个是放实体类映射xml文件的绝对路径
    private static String resourceDir  = "E:/IdeaProject/myblog/blog-commons/src/main/resources/mapper/";


    /**
     * 数据库配置四要素
     */
    private static String driverName = "com.mysql.cj.jdbc.Driver";
    private static String url = "jdbc:mysql://47.102.106.96:3306/blog?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
    private static String username = "root";
    private static String password = "Tcj990124@";


    public static void main(String[] args) {

        //代码生成器
        AutoGenerator mpg = new AutoGenerator();
        //全局配置

        GlobalConfig gc = new GlobalConfig();

        gc.setOutputDir(javaSrcDir);//设置输出路径 也就是上面的项目绝对路径
        gc.setAuthor("Tcj");//设置作者
        gc.setFileOverride(true);//是否覆盖
        gc.setBaseResultMap(true);//是否生成resultMap
        gc.setBaseColumnList(true);//是否生成ColumnList
        gc.setMapperName("%sMapper");//生成mapper的命名方式 例如：%sDao 生成的则是UserDao

        mpg.setGlobalConfig(gc);

        //数据库配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL);
        dataSourceConfig.setDriverName(driverName);
        dataSourceConfig.setUsername(username);
        dataSourceConfig.setPassword(password);
        dataSourceConfig.setUrl(url);
        mpg.setDataSource(dataSourceConfig);


        //包名配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.blog");//设置父包名
        packageConfig.setMapper("mapper");//设置生成mapper的包名
        packageConfig.setEntity("domain");//设置生成实体类的包名
        mpg.setPackageInfo(packageConfig);

        //注入InfectionConfig配置 这个是自定义配置

        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {

            }
        };

        //设置自定义文件生成位置，这个是自定义mapper的xml映射文件路径，默认的是会生成到mapper包里面的
        List<FileOutConfig> focList = new ArrayList<>();
//        focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
//            @Override
//            public String outputFile(TableInfo tableInfo) {
//                System.out.println(tableInfo.getEntityName());
//                return resourceDir+tableInfo.getEntityName()+"Mapper.xml";
//            }
//        });

        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);

        // 关闭默认 xml 生成，
        TemplateConfig tc = new TemplateConfig();
        tc.setController(null);//设置为null则不生成Controller，其他的同理
        tc.setXml(null);//设置为null则不生成
        mpg.setTemplate(tc);

        StrategyConfig strategyConfig = new StrategyConfig();
        //数据库表映射到实体的命名策略，也就是将下划线命名转驼峰命名
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        mpg.setStrategy(strategyConfig);
        mpg.execute();

    }

}
